package com.link.base.base.user.dao.mybatis.mapper;

import com.link.base.base.user.model.User;
import com.link.base.user.model.AppSecurityMenu;
import com.link.base.user.model.CoreUser;
import com.link.base.user.model.RoleAuth;
import com.link.core.basic.dao.mapper.BasicMapper;

import java.util.List;

/**
 * @author unknown
 * @date unknown
 * @comments 用户数据处理
 */
public interface UserMapper extends BasicMapper<User> {

    /**
     * 修改用户密码
     *
     * @param record 用户信息
     * @throws Exception
     */
    public void changeUserPassword(CoreUser record) throws Exception;

    /**
     * 重置用户密码
     *
     * @param user 用户信息
     * @throws Exception
     */
    public void resetUserPassword(User user) throws Exception;

    /**
     * 根据Id查询用户
     *
     * @param record
     * @return id
     * @throws Exception
     */
    public User queryByUserId(User record) throws Exception;

    /**
     * <p>根据id查询用户基本信息，工号、用户名等</p>
     *
     * @author yrf
     * @param record
     * @return User
     * @throws Exception
     */
    public User querySampleUserById(User record) throws Exception;


    /**
     * 更新DMS个人信息
     *
     * @param record
     * @throws Exception
     */
    public void updateDmsProfile(User record) throws Exception;

    /**
     * 修改主要职位
     *
     * @param record
     * @throws Exception
     */
    public void mainPostnUpdate(User record) throws Exception;

    /**
     * <p>查询当前账套下基本用户信息</p>
     *
     * @author yrf
     * @param record
     * @return List
     * @throws Exception
     */
    public List<User> queryCorpSampleUser(User record) throws Exception;

    /**
     * app用
     * 查询当前用户信息
     *
     * @param login
     * @return 用户信息
     */
    public User queryByLogin(User login);

    /**
     * 查询职责下的菜单
     *
     * @param login
     * @return List RoleAuth
     */
    public List<RoleAuth> queryRoleAuth(User login);

    /**
     * 查询菜单下的安全性菜单
     *
     * @param list
     * @return 安全性菜单
     */
    public List<AppSecurityMenu> querySecurityMenu(List<RoleAuth> list);


    /**
     * 绑定微信/QQ 用的unionId 到用户表
     *
     * @param record
     * @throws Exception
     */
    public Integer thirdClientBindUser(User record) throws Exception;

    /**
     * 解除微信绑定
     *
     * @param user
     * @throws Exception
     */
    public void unBoundWeChatAccount(User user) throws Exception;

    /**
     * 解除QQ绑定
     *
     * @param user
     * @throws Exception
     */
    public void unBoundQQAccount(User user) throws Exception;

    /**
     * 查询
     *
     * @param user
     * @return 用户
     * @throws Exception
     */
    public User getBoundAccounts(User user) throws Exception;

    /**
     * 根据组织id 查询该组织下的所有用信息
     *
     * @param user
     * @return 所有用户信息
     * @throws Exception
     */
    public List<User> queryUserList(User user) throws Exception;

    /**
     * 更新用户信息
     *
     * @author ouyangzhenqiang
     * @date 2018/11/1
     * @param record
     * @throws Exception
     */
    void updateUserInfo(User record) throws Exception;

    /**
     * 获取头像
     *
     * @author ouyangzhenqiang
     * @date 2018/11/1
     * @param record
     * @return 用户
     * @throws Exception
     */
    User getUserIcon(User record) throws Exception;


    /**
     * 更新用户状态
     *
     * @param record
     * @throws Exception
     */
    public void userStatusUpdate(User record) throws Exception;

    /**
     * 根据管理员用户名,获取管理员信息
     * 用户外部接口获取管理员信息,所以只查询少量字段
     *
     * @author LiQun
     * @date 2018/11/29
     * @param user username 管理员姓名
     */
    public User queryEnterpriseAdminByName(User user) throws Exception;

    /**
     * 解绑QQ账号，不使用unionid
     *
     * @author quyuantao
     * @date 2019/4/2 20:40
     * @param user 用户
     */
    Integer unBoundQQWithOutUnionid(User user) throws Exception;

    /**
     * 解绑微信账号，不使用unionid
     *
     * @author quyuantao
     * @date 2019/4/2 20:39
     * @param user 用户
     */
    Integer unBoundWXWithOutUnionid(User user) throws Exception;

    /**
     * 根据unionId（QQ或微信）获取对应用户
     *
     * @author cuizhiyong
     * @date 2019/4/2 20:40
     * @param user 传入wxUnionId或qqUnionId
     */
    public List<User> getUsersByUnionId(User user) throws Exception;

    /**
     * 根据传入的ORGID获取他及他下级组织的所有用户
     * @author 黄正杨
     * @date 2019/4/23
     * @param user
     * @return List
     * @throws Exception
     */
    List<User> selectByOrgIdPage(User user)throws Exception;

    /**
     * 根据用户查询ESB用户
     *
     * @author 刘启鑫
     * @date 2020/9/9 22:01
     */
    List<User> queryESBUsersByUserPage(User user);
}
